`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2023/11/08 15:56:04
// Design Name: 
// Module Name: uart_rx
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////


module uart_rx#(
    parameter   UART_DATAWIDTH  =   8,
    parameter   UART_CHECK      =   1,
    parameter   UART_STOP_WIDTH =   1
)(
    input   i_clk       ,
    input   i_rst       ,
    input   i_uart_rx   ,

    output  [UART_DATAWIDTH - 1 : 0]    o_user_rx_data  ,
    output                              o_user_rx_valid 
    );

// /*********parameter**********/

// /*********wire***************/

// /*********reg****************/
// reg                             r_uart_rx           ;
// reg [15 : 0]                    r_cnt               ;
// reg [UART_DATAWIDTH - 1 : 0]    r_o_user_rx_data    ;
// reg                             r_rx_check          ;
// reg                             r_o_user_rx_valid   ;

// /*********code***************/

// always @(posedge i_clk,posedge i_rst ) begin
//     if(i_rst)
//         r_uart_rx <= 'd1;
//     else
//         r_uart_rx <= i_uart_rx;
// end
// always @(posedge i_clk,posedge i_rst ) begin
//     if(i_rst)
//         r_cnt <= 16'd0;
//     else if(r_cnt == 2 + UART_DATAWIDTH + UART_STOP_WIDTH - 1 && UART_CHECK != 0)
//         r_cnt <= 16'd0;
//     else if(r_cnt == 2 + UART_DATAWIDTH + UART_STOP_WIDTH - 2 && UART_CHECK == 0)
//         r_cnt <= 16'd0;
//     else if((!i_uart_rx && r_cnt == 0) || r_cnt > 0)
//         r_cnt <= r_cnt + 16'd1;
//     else
//         r_cnt <= r_cnt;
    
// end

// always @(posedge i_clk,posedge i_rst ) begin
//     if(i_rst)
//         r_o_user_rx_data <= 'd0;
//     else if(r_cnt >=1 && r_cnt <= UART_DATAWIDTH)
//         r_o_user_rx_data <= {i_uart_rx,r_o_user_rx_data[UART_DATAWIDTH-1:1]};
//     else
//         r_o_user_rx_data <= r_o_user_rx_data;
// end

// always @(posedge i_clk,posedge i_rst ) begin
//     if(i_rst)
//         r_rx_check  <=  'd0;
//     else if(r_cnt >= 1 && r_cnt <= UART_DATAWIDTH)
//         r_rx_check  <=  r_rx_check  ^   i_uart_rx;
//     else
//         r_rx_check  <= 'd0;
// end
// always @(posedge i_clk,posedge i_rst ) begin
//     if(i_rst)
//         r_o_user_rx_valid <= 1'b0;
//     else if(r_cnt == UART_DATAWIDTH + 1 && UART_CHECK == 0)
//         r_o_user_rx_valid <= 1'b1;
//     else if(r_cnt == UART_DATAWIDTH + 1 && UART_CHECK == 1 && i_uart_rx == ~r_rx_check)
//         r_o_user_rx_valid <= 1'b1;
//     else if(r_cnt == UART_DATAWIDTH + 1 && UART_CHECK == 2 && i_uart_rx == r_rx_check)
//         r_o_user_rx_valid <= 1'b1;
//     else
//         r_o_user_rx_valid <= 1'b0;
// end

// assign  o_user_rx_data  =   r_o_user_rx_data    ;
// assign  o_user_rx_valid =   r_o_user_rx_valid   ;
/***********************上面是自己的代码*****************/

endmodule
